วิธีการแปลภาษาด้วย TranslateAPI แบบไม่ให้ภาษาไทยมันเพี้ยน : Serverless Web App บน AWS : Part 4
บทความนี้ดัดแปลงเนื้อหาบางส่วนมาจาก Hands-on Training ของ Website AWS Official ของญี่ปุ่น สามารถอ่านเนื้อหาต้นฉบับได้ที่ AWS Hands-on for Beginners Serverless #1 サーバーレスアーキテクチャで翻訳 Web API を構築する | AWS Webinar
บทความนี้เป็นส่วนนึงของเนื้อหาในบทเรียนเกี่ยวกับ AWS API Gateway ที่ผมสร้างขึ้นมา คุณผู้อ่านสามารถตรวจสอบเนื้อหาทั้งหมดได้โดยการคลิกที่ชื่อของผม
เป้าหมายใหญ่สุดของบทเรียนนี้คือ การทำ Web app แปลภาษาที่เป็น serverless ครับ
สวัสดีครับ ต้า ครับ
บทความนี้เป็นส่วนนึงของเนื้อหาในบทเรียนเกี่ยวกับ AWS API Gateway ที่ผมสร้างขึ้นมา
ซึ่งผมทำการแยกย่อยๆออกมาโดยเนื้อหาในบทความพวกนี้สามารถจบได้ในตัวของมันเอง
สำหรับหัวข้ออื่นๆ ของบทความนี้ สามารถตรวจสอบได้ที่ช่วงท้ายของบทความครับ
สำหรับบทความนี้เราจะมาทำกันในส่วนนี้ครับ
จะเป็นการแก้ไขโค้ดใน Lambda เพื่อให้สามารถแปลเป็นภาษาไทยได้โดยตัวอักษรไม่เพี้ยน
บทความนี้เราจะมาทำกันใน Singapore Region กันครับ
เริ่มลงมือทำ
ปัญหาการแปลภาษาจากอังกฤษเป็นไทย และ วิธีแก้
ในหัวข้อที่ผ่านมา เราได้ทำการแปล ภาษาอังกฤษ เป็น ภาษาไทย กันไปแล้ว
หัวข้อนี้เราจะมาลองทำการแปลภาษาจาก ไทย เป็น อังกฤษ กันบ้างครับ
โดยเมื่อเราทำการเปลี่ยนโค้ดใน Lambda จาก
SourceLanguageCode="th", >>> Change to >>> SourceLanguageCode="en",
TargetLanguageCode="en" >>> Change to >>> TargetLanguageCode="th"
แล้วเปลี่ยน ตัว Test ใน Event JSON ให้เป็นต้องการแปลจากภาษาอังกฤษ เช่น
"input_text": "อยากกินกล้วย" >>> Change to >>> "input_text": "I wanna eat bananas"
แล้วเมื่อเราลองแปลภาษาตอนนี้ จะเกิดปัญหาอยู่อย่างนึงคือเมื่อเราลองให้แปลภาษาเป็นไทย หรือภาษาที่ใช้ตัวอักษรพิเศษ เราจะเห็นได้ว่า เมื่อแปลแล้ว จะได้ภาษาที่เพี้ยนๆ
สาเหตุเนื่องมาจาก json.dumps ของ python จะถูกตั้งว่าไว้ให้ ASCII เป็น True
โดยวิธีแก้นั้น เราสามารถทำได้ เข้าไปแก้โค้ดใน Lambda ได้ ดังต่อไปนี้
เพิ่ม ensure_ascii=False
ลงใน output_text ของ return ของคุณ
โดยทำการแก้ตามด้านล่างนี้
[อันเดิม]
return {
'statusCode': 200,
'body': json.dumps({
'output_text': output_text
}),
'isBase64Encoded': False,
'headers': {}
}
[อันใหม่]
return {
'statusCode': 200,
'body': json.dumps({
'output_text': output_text
}, ensure_ascii=False), # บรรทัดที่ถูกเพิ่มเข้ามา
'isBase64Encoded': False,
'headers': {}
}
เมื่อเราทำการทดสอบอีกรอบจะเห็นได้ว่าแปลได้เป็นภาษาไทยแล้ว
บทความ Part อื่นๆ
- ใช้ AWS Lambda เรียกใช้งาน Amazon Translate แปลภาษา : Part 1 | DevelopersIO
- ใช้ API Gateway เชื่อมต่อไปยัง Lambda เรียก API แปลภาษา : Part 2 | DevelopersIO
- ใช้ DynamoDB บันทึกข้อมูลจาก Lambda : Part 3 | DevelopersIO
- แก้ ensure_ascii=False เพื่อให้แปลภาษาอังกฤษ > ไทย แล้วตัวอักษรไม่เพี้ยน : Part 4 | DevelopersIO
- เพิ่มตัวแปรให้เพิ่มรูปแบบการแปลได้หลากหลายมากขึ้น : Part 5 | DevelopersIO
- ดาวน์โหลดโค้ด Front-end และ ตั้งค่า CORS : Part 6 | DevelopersIO
- เพิ่มฟังก์ชัน History ให้สามารถเรียกดูปะวัติการแปลได้ : Part 7 | DevelopersIO
- อัพโหลดเว็บไซต์ขึ้นบน S3 (Hosting Server) : Part 8 | DevelopersIO